package hopfield.util;

import static hopfield.Configuracion.*;

public class Matriz {

	/**
	 * Devuelve la matriz transpuesta de <b>a</b>
	 * 
	 * @param a
	 *            matriz entrante de dos dimensiones
	 * @param f
	 *            cantidad de filas
	 * @param c
	 *            cantidad de columnas
	 * @return           
	 */
	public static int[][] traspuesta(final int[][] a, final int f, final int c) {
		int[][] t = new int[c][f];
		for (int i = 0; i < f; i++) {
			for (int j = 0; j < c; j++) {
				t[j][i] = a[i][j];
			}
		}
		return t;
	}

	/**
	 * Devuelve la matriz producto de <b>a</b> y <b>B</b>.
	 * 
	 * @param a
	 * 				matriz multiplicado de entrada
	 * @param b
	 * 				matriz multiplicador de entrada 
	 * @param af	
	 * 				cant de filas para <b>a</b>
	 * @param bc
	 * 				cant de columnas para <b>b</b>
	 * @param cf 
	 * 				cant de columnas para <b>a</b> y filas para <b>b</b>
	 * @return
	 */
	public static int[][] producto(int[][] a, int[][] b) {
		int[][] p = new int[
		for (i=0; i< af; i++) {
			for (j=0; j< bc; j++) {
				for (k=0; k< cf;k++) {
					
				}
			}
		}
		return null;
	}

	/**
	 * Retorna la matriz opuesta a A
	 * 
	 * @param a
	 * @return
	 */
	public static int[][] opuesta(final int[][] a) {
		// for i > for j
		return null;
	}

	/**
	 * Retorna la suma de a y b
	 * 
	 * @param a
	 * @param b
	 * @return
	 */
	public static int[][] suma(final int[][] a, final int[][] b) {
		// for i > for j
		return null;
	}

	/**
	 * Retorna si ambas matrices son iguales
	 * 
	 * @param a
	 * @param b
	 * @return
	 */
	public static boolean sonIguales(final int[][] a, final int[][] b) {
		// for i > for j
		// if a[i][j]!=b[i][j] return false
		return true;
	}

	/**
	 * Retorna la posicion del minimo de la matriz
	 * 
	 * @param a
	 * @return
	 */
	public static int posMinimo(final double[] a) {
		int pos = 0;
		double minimo = a[0];
		for (int i = 0; i < a.length; i++) {
			if (a[i] < minimo) {
				minimo = a[i];
				pos = i;
			}
		}
		return pos;
	}

	/**
	 * 
	 * @param a
	 *            matriz
	 * @param x
	 *            indice pivote de filas
	 * @param y
	 *            indice pivote de folumnas
	 */
	public static void rgauss(final double[][] a, final int x, final int y) {
		for (int i = 0; i < CANT_FILAS; i++) {
			if (i == x) {
				continue;
			}
			// multiplicar la fila pivote y sumarle la fila
			for (int j = 0; j < CANT_COLUMNAS; i++) {
			}
		}
	}

	public static void gauss(final double[][] a) {
		for (int i = 0; i < CANT_FILAS - 1; i++) {
			for (int k = i + 1; k < CANT_FILAS; k++) {
				for (int j = 0; j < CANT_COLUMNAS; j++) {
					rgauss(a, i, j);
				}
			}
		}
	}

}